; atomic.asm
; 
;  Copyright 2005 Corey Tabaka
;
;  Licensed under the Apache License, Version 2.0 (the "License");
;  you may not use this file except in compliance with the License.
;  You may obtain a copy of the License at
;
;      http://www.apache.org/licenses/LICENSE-2.0
;
;  Unless required by applicable law or agreed to in writing, software
;  distributed under the License is distributed on an "AS IS" BASIS,
;  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;  See the License for the specific language governing permissions and
;  limitations under the License.
;

section .text
bits 32

; int __attribute__ ((regparm(2))) atomic_exchange(int set, int *test);
[global _atomic_exchange]
_atomic_exchange:
	xchg eax,[edx]
	ret

[global _atomic_set]
_atomic_set:
	lock
	xchg [edx],eax
	ret

[global _atomic_add]
_atomic_add:
	lock
	xadd [edx],eax
	ret

[global _atomic_and]
_atomic_and:
	lock
	and [edx],eax
	ret

[global _atomic_or]
_atomic_or:
	lock
	or [edx],eax
	ret
	